package br.com.sgpv2.entity.dependente;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


import br.com.sgpv2.entity.pessoa.Pessoa;

/**
 * Classe que representa uma entidade Dependente no sistema.
 */
@Entity
@Table(name = "dep_dependente")
@SequenceGenerator(name = "sequenceDependente", sequenceName = "dep_dependente_dep_id_seq")
public class Dependente implements Serializable {

	private static final long serialVersionUID = 1L;
	private int id;
	private Pessoa pessoa;
	private String nome;
	private RelacaoParentescoEnum relacaoParentesco;
	private OcupacaoDependenteEnum ocupacao;
	private String dataInicioOcupacao;
	private String dataFimOcupacao;
	private String dataNascimento;

	/**
	 * Recupera o valor do ID da entidade.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "dep_id", nullable = false)
	public int getId() {
		return id;
	}

	/**
	 * Configura o valor do ID da entidade.
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Recupera o valor do ID da pessoa.
	 */
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "pes_id", nullable = false)
	public Pessoa getPessoa() {
		return pessoa;
	}

	/**
	 * Configura o valor do ID da pessoa.
	 */
	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	/**
	 * Recupera o o nome do dependente.
	 */
	@Column(name = "dep_nome", nullable=false)
	public String getNome() {
		return nome;
	}

	/**
	 * Configura o nome do dependente.
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * Recupera o grau de parentesco do dependente.
	 */
	@Column(name = "dep_relacao_parentesco", nullable=false)
	@Enumerated(EnumType.STRING)
	public RelacaoParentescoEnum getRelacaoParentesco() {
		return relacaoParentesco;
	}

	/**
	 * Configura o grau de parentesco do dependente.
	 */
	public void setRelacaoParentesco(RelacaoParentescoEnum relacaoParentesco) {
		this.relacaoParentesco = relacaoParentesco;
	}

	/**
	 * Recupera a ocupação do dependente.
	 */
	@Column(name = "dep_ocupacao_dependente", nullable=false)
	@Enumerated(EnumType.STRING)
	public OcupacaoDependenteEnum getOcupacao() {
		return ocupacao;
	}

	/**
	 * Configura a ocupação do dependente.
	 */
	public void setOcupacao(OcupacaoDependenteEnum ocupacao) {
		this.ocupacao = ocupacao;
	}

	/**
	 * Recupera a data in�cio da ocupação do dependente.
	 */
	@Column(name = "dep_data_inicio_ocupacao")
	public String getDataInicioOcupacao() {
		return dataInicioOcupacao;
	}

	/**
	 * Configura a data in�cio da ocupação do dependente.
	 */
	public void setDataInicioOcupacao(String dataInicioOcupacao) {
		this.dataInicioOcupacao = dataInicioOcupacao;
	}

	/**
	 * Recupera a data fim da ocupação do dependente.
	 */
	@Column(name = "dep_data_fim_ocupacao")
	public String getDataFimOcupacao() {
		return dataFimOcupacao;
	}

	/**
	 * Configura a data fim da ocupação do dependente.
	 */
	public void setDataFimOcupacao(String dataFimOcupacao) {
		this.dataFimOcupacao = dataFimOcupacao;
	}

	/**
	 * Recupera a data de nascimento do dependente.
	 */
	@Column(name = "dep_data_nascimento")
	public String getDataNascimento() {
		return dataNascimento;
	}

	/**
	 * Configura a data de nascimento do dependente.
	 */
	public void setDataNascimento(String dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

}
